perm filename MINIT[MUS,LCS]1 blob
sn#312564 filedate 1977-10-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00006 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 NO_MSG←1 < INHIBITS REPETITIVE MESSAGES
C00006 00003 <EXTERNAL FUNCTION
C00008 00004 FUNCTION SYNTH(ARRAY FUNC)
C00010 00005 <comment: type 'SETMAG nchns, srate'
C00013 00006 <FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00016 ENDMK
C⊗;
NO_MSG←1; < INHIBITS REPETITIVE MESSAGES
COMMENT: ******INITIALIZATION FILE FOR MUS10.DMP******** 10/77
***THIS IS STANFORD VERSION.
TO CREATE MUS10.DMP RUN COMMAND FILE, 'LMUS.CMD',
THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.
THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
SEG(ARRAY FUNC)
SYNTH(ARRAY FUNC)
POWER( N, X ) [GIVES POWER OF N TO THE XTH] ;
VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62; CS←DF←277.18; D←293.66; DS←EF←311.13; E←FF←329.63;
F←ES←349.23; FS←GF←369.99; G←391.99; GS←AF←415.31;
A←440; AS←BF←466.16; B←493.89; CF←B/2; BS←C*2;
EXTERNAL FUNCTION SIND(X),
SIN(A), EXP(A), ALOG(A), SQRT(A), RDNUM(X);
FUNCTION SEEIT(ARRAY FUNC); BEGIN
VARIABLE K; PRINT "SEG ARRAY ";
END;
<EXTERNAL FUNCTION
< RDNUM(X), SIND(X),
< SIN(A), EXP(A), ALOG(A), SQRT(A);
FUNCTION SEG(ARRAY FUNC);
BEGIN
VARIABLE X512,K,A1,A2,ST,STPP,STPS,IS,IT,DIF,RK;
A1←0; ST←0; STPP←0; X512←0;
WHILE STPP ≤ 1 DO
BEGIN
RDNUM(A2);
IF A2 =512 THEN X512←A2;
IF A2 =512 THEN RDNUM(A2); RDNUM(STPP);
COMMENT: TYPE 512 AT FIRST TO USE 512 STEPS INSTEAD OF 100 STEPS.;
IF STPP ≤ 1 THEN A1←A2;
END;
WHILE STPP < 999 DO
BEGIN
IS← INT(STPP*5.120+.0001);
IF X512 > 0 THEN IS←INT(STPP+.0001);
IF IS > 512 THEN
BEGIN PRINT " *** SMOOTHED ";
FOR K←0 STEP 1 UNTIL 511 DO
COMMENT: READ 512 NUMS FROM A FUNC FILE.;
BEGIN
RDNUM(RK); FUNC(K)← RK;
END;
SEEIT(FUNC);
RETURN;
END;
STPP ← IS-1; STPS ← STPP-ST;
IS ← INT(STPS); DIF←A2-A1;
IT←INT(ST); ST ← STPP;
FOR K←0 STEP 1 UNTIL IS DO
BEGIN
RK ← K;
FUNC(K+IT) ← A1+DIF*RK/STPS;
END;
IF STPP = 511 THEN SEEIT(FUNC);
IF STPP ≥ 511 THEN RETURN;
A1←A2; ST←STPP;
RDNUM(A2); RDNUM(STPP);
END;
END;
FUNCTION SYNTH(ARRAY FUNC);
BEGIN
VARIABLE K,XX,H,FAC,CON,AMP,X,XK,J;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN
FUNC(J) ← 0; END;
COMMENT: CLEAR THE ARRAY;
RDNUM(XX); IF XX = 99 THEN XX ← -XX;
H ← XX; IF XX < 0 THEN RDNUM(H);
WHILE H < 999 DO
BEGIN
RDNUM(AMP);
X ←0; CON ←0;
IF XX < 0 THEN
BEGIN
RDNUM(X); RDNUM(CON);
COMMENT X ← X * 1.42222222 +1 ; COMMENT 1.422 = 512/360 ;
X ← X * 512/360 +1;
END;
FOR J ← 0 STEP 1 UNTIL 511 DO
BEGIN
XK ← SIND(X*360/512) * AMP + CON;
COMMENT: .703125 = 360/512 ; XK ← SIND(X*.703125) * AMP + CON ;
IF CON ≥ 100 THEN FUNC(J) ← (XK-100)*FUNC(J) ;
IF CON < 100 THEN FUNC(J) ← FUNC(J) + XK ;
X ← X+H; IF X > 512 THEN X ← X-512;
END;
RDNUM(H);
END;
X ← FUNC(0); COMMENT: NEXT FOR NORMALIZATION;
FOR J ← 1 STEP 1 UNTIL 511 DO BEGIN H ← ABS(FUNC(J));
IF X < H THEN X ← H; END;
FOR J ← 0 STEP 1 UNTIL 511 DO BEGIN FUNC(J) ← FUNC(J) / X ; END;
SEEIT(FUNC); COMMENT PRINT " SYNTH ARRAY "; COMMENT:********SEE(FUNC);
END;
FUNCTION POWER(X,N)=EXP(N*ALOG(X)); comment nth power of x;
<comment: type 'SETMAG; nchns, srate' ;
FUNCTION MAGERR(X);
BEGIN PRINT "IMPROPER INPUT. "; X←0;
print "Type number of channels and sample rate: ";
END;
FUNCTION ADJRATE; BEGIN
IF SRATE < 6400 THEN BEGIN
IF SRATE <8 THEN SRATE ← 6400; IF SRATE <10 THEN SRATE ← 8000;
IF SRATE <12 THEN SRATE ← 10000; IF SRATE <16 THEN SRATE ← 12800;
IF SRATE <20 THEN SRATE ← 16000; IF SRATE <25 THEN SRATE ← 20000;
IF SRATE <32 THEN SRATE ← 25600; IF SRATE <40 THEN SRATE ← 32000;
IF SRATE <50 THEN SRATE ← 40000; IF SRATE <60 THEN SRATE ← 51200;
IF SRATE <80 THEN SRATE ← 64000; IF SRATE <100 THEN SRATE ← 80000;
IF SRATE <120 THEN SRATE ← 102400; IF SRATE <130 THEN SRATE ← 128000;
IF SRATE <200 THEN SRATE ← 160000; IF SRATE <220 THEN SRATE ← 204800;
IF SRATE <260 THEN SRATE ← 256000; IF SRATE <4000 THEN SRATE ← 10000;
COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC. 10000=10000;
END; END;
Function SETMAG;
begin
VARIABLE X; X←0;
WHILE X = 0 DO
BEGIN X←1; rdnum(nchns); rdnum(srate);
IF NCHNS > 4 THEN MAGERR(X);
IF NCHNS = 3 THEN MAGERR(X);
IF NCHNS < 1 THEN MAGERR(X);
ADJRATE;
COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
COMMENT: IF INT(SRATE/6400+.1) } SRATE/6400 THEN MAGERR(X);
END;
MAG←512/srate;
PRINT "NCHNS=",NCHNS," SRATE=",SRATE ;
end;
<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12800;
<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;
INSTRUMENT TOOT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;
INSTRUMENT CLAR;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;
INSTRUMENT BRIT;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;
INSTRUMENT BUZZ;
OSCIL[10](P4,10*MAG/P2,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;
ARRAY F1,F2,F3,F4,F5,F6(512);
SYNTH(F1);1 1 999; < TOOT - SINE WAVE (USED FOR SIMP ALSO)
SEG(F2);.9 6,1 11 .9 82 .7 90 0 100; < MEZZO LEGATO
SEG(F3);1 3,1 11,.4 31,.1 51,0 100; < STACCATO
SYNTH(F4);1,.5 3,.3 5,.2 7,.1 999; < CLAR
SYNTH(F5);1,.3 2,.4 3,.2 8,.2 12 .1 999; < BRIT
SEG(F6);-1,1 1,7 -1,14 -1,100; < BUZZ
OUTFILE←"TEST.SND"; <SETS UP DEFAULT OUTPUT FILE NAME. (BITS←12;)
PLAY;TOOT 0 .12 C 1000 F2 F1 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F1;FINISH;